1. Contexto

O Instituto Nacional de Estudos e Pesquisas Educacionais Anísio Teixeira (Inep) divulgou no dia 21 de Junho de 2017 sobre remuneração média dos professores em exercício na educação básica. O estudo é resultado de uma nova metodologia do Inep cruzando informações do Censo Escolar com a Relação Anual de Informações Sociais (Rais) de 2014, do Ministério do Trabalho e da Previdência Social. O levantamento mostrou uma população de 2.080.619 professores.$^{[1]}$

De acordo com o levantamento, com dados referentes a 2014, uma jornada semanal de 40h representa, na rede de ensino de Porto Alegre, uma média de proventos mensais de R\$ 10.947,15. Porto Alegre seria a rede que melhor paga entre as capitais (média é de R\$ 3.116). Ofereceria também remuneração superior àquela das escolas federais, estaduais e privadas. $^{[2]}$

O dito estudo do Inep é citado em diversas notícias, por exemplo G1, MEC, 10 anos de metodologia de coleta de dados individualizada dos censos educacionais. O estudo completo infelizmente não foi encontrado, porém a apresentação Remuneração Média dos Docentes da Educação Básica pode ser baixada completamente.

Fontes:
$^{[1]}$ Inep divulga estudo sobre salário de professor da educação básica
$^{[2]}$ Itamar Melo. Salário em alta, ensino em baixa. Zero Hora, 30 de Junho de 2017.

2. Fonte de dados:

Quando fui buscar os microdados da RAIS para download tive a (não) imensa surpresa de enfrentar uma enorme dificuldade para encontrá-los. No site do Ministério do Trabalho não há nenhuma referência a RAIS (ou algo que lembre minimamente ela). Uma notícia no site do Governo Federal informa um novo link para consulta dos dados da RAIS; infelizmente o link acaba numa página 'Not Found'. O site (oficial) da RAIS faz referência apenas a download do GDRAIS 2016, GDRAIS Genérico (1976-2015), o Manual de Orientação, Layout e a Portaria da RAIS ano-base 2016; nada dos microdados. Felizmente no site do Laboratório de Estudos Econômicos da Universidade Federal de Juiz de Fora é possível encontrar diversos links para acesso dos microdados originais de diversas pesquisas brasileiras, entre elas a RAIS!

Após clicar no link da RAIS 2014$^{[1]}$, é possível manualmente baixar os microdados para cada Estado brasileiro (no Linux, é possível abrir o terminal - ou linha de comando - e digitar wget -m ftp://ftp.mtps.gov.br/pdet/microdados/RAIS/2014/ que os dados serão baixados automaticamente para sua pasta inicial).

Observações da RAIS trabalhador$^{[2}$: arquivos com separador ';', ao encontrar '-1', '{ñ class}', '{ñclass}' ou parte do texto considerar como ignorado, separador do decimal é ','.

Fontes:
$^{[1]}$ ftp://ftp.mtps.gov.br/pdet/microdados/RAIS/2014/
$^{[2}$ ftp://ftp.mtps.gov.br/pdet/microdados/RAIS/Layouts/v%C3%ADnculos/RAIS_vinculos_layout.xls

3. Software:

Eu utilizei a linguagem de programação Python 3.6.1. utilizando a distribuição Anaconda da Continuum Analytics, por ser uma linguagem gratuita e open-source, além de rápida e versátil, garantindo a total reprodutibilidade do presente estudo. O presente documento é um Jupyter notebook que mistura texto (Markdown e HTML), código (Python) e visualizações (tabelas, gráficos, imagens etc.).

Bibliotecas utilizadas: Pandas (data structures and data analysis), Jupyter (create and share documents that contain live code, equations, visualizations and explanatory text), StatsModels.


In [1]:
# Começamos importando as bibliotecas a serem utilizadas:

import numpy as np
import pandas as pd
import seaborn as sns; sns.set()

%matplotlib inline

In [2]:
# Importando os microdados do arquivo .zip:

rs = pd.read_table('/mnt/part/Data/RAIS/2014/RS2014.zip', sep = ';', encoding = 'cp860', decimal = ',')
rs.head() # mostra as primeiras 5 linhas do DataFrame


/home/jayme/anaconda3/lib/python3.6/site-packages/IPython/core/interactiveshell.py:2717: DtypeWarning: Columns (7) have mixed types. Specify dtype option on import or set low_memory=False.
  interactivity=interactivity, compiler=compiler, result=result)
Out[2]:
Bairros SP Bairros Fortaleza Bairros RJ Causa Afastamento 1 Causa Afastamento 2 Causa Afastamento 3 Motivo Desligamento CBO Ocupaτπo 2002 CNAE 2.0 Classe CNAE 95 Classe ... Vl Remun MΘdia (SM) CNAE 2.0 Subclasse Sexo Trabalhador Tamanho Estabelecimento Tempo Emprego Tipo Admissπo Tipo Estab Tipo Estab.1 Tipo Defic Tipo Vφnculo
0 {± c {± c {± c 99 99 99 11 724205 42219 45314 ... 1.88 4221902 1 7 33.8 0 1 CNPJ 0 10
1 {± c {± c {± c 99 99 99 12 715210 42928 45250 ... 1.16 4292801 1 4 1.5 2 1 CNPJ 0 10
2 {± c {± c {± c 99 99 99 11 632125 2209 2127 ... 1.44 220901 1 3 30.5 0 3 CEI 0 25
3 {± c {± c {± c 99 99 99 12 514320 47890 52493 ... 1.10 4789099 1 4 1.5 2 1 CNPJ 0 10
4 {± c {± c {± c 99 99 99 11 517410 81117 70327 ... 1.59 8111700 1 5 9.4 2 1 CNPJ 0 10

5 rows × 45 columns


In [3]:
print('O formato do DataFrame é: ' , rs.shape, '(linhas, colunas)')
print('\n', 'O tipo de cada coluna:', '\n\n',rs.dtypes)


O formato do DataFrame é:  (4868391, 45) (linhas, colunas)

 O tipo de cada coluna: 

 Bairros SP                  object
Bairros Fortaleza           object
Bairros RJ                  object
Causa Afastamento 1          int64
Causa Afastamento 2          int64
Causa Afastamento 3          int64
Motivo Desligamento          int64
CBO Ocupaτπo 2002           object
CNAE 2.0 Classe              int64
CNAE 95 Classe               int64
Distritos SP                object
Vφnculo Ativo 31/12          int64
Faixa Etßria                 int64
Faixa Hora Contrat           int64
Faixa Remun Dezem (SM)       int64
Faixa Remun MΘdia (SM)       int64
Faixa Tempo Emprego          int64
Escolaridade ap≤s 2005       int64
Qtd Hora Contr               int64
Idade                        int64
Ind CEI Vinculado            int64
Ind Simples                  int64
MΩs Admissπo                 int64
MΩs Desligamento             int64
Mun Trab                     int64
Municφpio                    int64
Nacionalidade                int64
Natureza Jurφdica            int64
Ind Portador Defic           int64
Qtd Dias Afastamento         int64
Raτa Cor                     int64
Regi⌡es Adm DF               int64
Vl Remun Dezembro Nom      float64
Vl Remun Dezembro (SM)     float64
Vl Remun MΘdia Nom         float64
Vl Remun MΘdia (SM)        float64
CNAE 2.0 Subclasse           int64
Sexo Trabalhador             int64
Tamanho Estabelecimento      int64
Tempo Emprego              float64
Tipo Admissπo                int64
Tipo Estab                   int64
Tipo Estab.1                object
Tipo Defic                   int64
Tipo Vφnculo                 int64
dtype: object

In [4]:
# Visualizando quais são

print('Bairros Fortaleza unique values:', rs['Bairros Fortaleza'].unique())
print('Bairros RJ unique values:', rs['Bairros RJ'].unique())
print('CBO 2002 unique values:', rs['CBO Ocupaτπo 2002'].unique())
print('Distritos SP unique values:', rs['Distritos SP'].unique())
print('Tipo Estab.1 unique values:', rs['Tipo Estab.1'].unique())


Bairros Fortaleza unique values: ['{± c']
Bairros RJ unique values: ['{± c']
CBO 2002 unique values: ['724205' '715210' '632125' ..., '254205' '213130' '225305']
Distritos SP unique values: ['           {± class}']
Tipo Estab.1 unique values: ['CNPJ' 'CEI ']

In [5]:
# Atribuindo '-1' aos valores '0000-1', mudando o tipo de 'object' para 'float':

rs[rs['CBO Ocupaτπo 2002'] == '0000-1'] = -1
# rs['CBO Ocupaτπo 2002'].dropna(inplace = True)
rs['CBO Ocupaτπo 2002'] = rs['CBO Ocupaτπo 2002'].astype(dtype = float)
rs['CBO Ocupaτπo 2002'].dtypes


Out[5]:
dtype('float64')

Segundo a apresentação, as variáveis utilizadas da RAIS são: UF, Município, Remuneração média anual do trabalhador, Classificação Brasileira de Ocupações (CBO), Classe de Atividade Econômica (CNAE), CPF, Ano, Natureza Jurídica (CONCLA), Quantidade de horas contratuais por semana, tempo de emprego do trabalhador, data de admissão do trabalhador e mês de desligamento.

Há duas variáveis de município ('Mun Trab' e 'Municφpio'), como elas são iguais na maior parte dos casos (99%), utilizo a 'Mun Trab'. Há diversas variáveis com a remuneração dos trabalhadores, utilizo a 'Vl Remun MΘdia Nom' (Descrição da variável: Remuneração média do trabalhador (valor nominal) - a partir de 1999). Há apenas uma coluna indicando o CBO. Para a CNAE, utilizo a 'CNAE 95 Classe'. Nos microdados baixados do site indicado, não há nenhuma coluna com CPF dos trabalhadores. O ano é 2014 para todas as linhas já que utilizo apenas a RAIS 2014. Há apenas uma coluna com a Natureza Jurídica que é 'Natureza Jurφdica'. Há apenas uma coluna para Horas contratuais que é 'Qtd Hora Contr'. Tempo de emprego é 'Tempo de Emprego', mês de admissão é 'MΩs Admissπo' e mês de desligamento é 'MΩs Desligamento'.


In [6]:
df = pd.DataFrame({'Munic': rs['Municφpio'],
                  'Remuneracao': rs['Vl Remun MΘdia Nom'],
                  'CBO': rs['CBO Ocupaτπo 2002'],
                  'CNAE': rs['CNAE 95 Classe'],
                  'Natureza': rs['Natureza Jurφdica'],
                  'Horas': rs['Qtd Hora Contr'],
                  'Tempo': rs['Tempo Emprego'],
                  'Admissao': rs['MΩs Admissπo'],
                  'Desligamento': rs['MΩs Desligamento'],
                  'Sexo': rs['Sexo Trabalhador'],
                  'Idade': rs['Faixa Etßria'],
                  'Raca': rs['Raτa Cor']})
print('Número de observações na base original:', len(df))
df.dropna(axis = 0, how = 'any', inplace = True)
print('Número de observações após excluir missings: ', len(df))
df.head()


Número de observações na base original: 4868391
Número de observações após excluir missings:  4868391
Out[6]:
Admissao CBO CNAE Desligamento Horas Idade Munic Natureza Raca Remuneracao Sexo Tempo
0 0 724205.0 45314 11 44 7 431490 2062 2 1370.39 1 33.8
1 2 715210.0 45250 4 44 6 430770 2062 4 845.06 1 1.5
2 0 632125.0 2127 8 44 7 431880 4120 2 1046.61 1 30.5
3 5 514320.0 52493 6 44 3 431490 2062 2 800.00 1 1.5
4 1 517410.0 70327 11 44 5 430770 2062 2 1159.05 1 9.4

In [7]:
print('Mun Trab é igual a Municφpio em' , round(((rs['Mun Trab'] == rs['Municφpio']).sum() / len(rs)) * 100, 4), '% dos casos')


Mun Trab é igual a Municφpio em 99.985 % dos casos

De acordo com o slide 10, a identificação dos docentes foi feita baseado nos seguintes códigos do CNAE e CBO:

CNAE:
75116: Administração Pública em Geral
80136: Educação Infantil creche
80144: Educação Infantil pré-escola
80152: Ensino Fundamental
80209: Ensino Médio
80969: Educação Profissional de Nível Técnico
80977: Educação Profissional de Nível Tecnológico
80993: Outras Atividades de Ensino

CBO:
23: Profissionais do Ensino
33: Professores leigos e de nível médio

Podemos utilizar uma lista para fatiar (slice) o quadro de dados (DataFrame). Fonte: Wouter Overmeire, https://stackoverflow.com/questions/12096252/use-a-list-of-values-to-select-rows-from-a-pandas-dataframe


In [8]:
cnae = [75116, 80136, 80144, 80152, 80209, 80969, 80977, 80993]
cbo = [23, 33]

df1 = df[df['CNAE'].isin(cnae) | (df['CBO'] / 10000).apply(np.floor).isin(cbo)]

Entretanto, podemos notar que as categorias 23 e 33 de CBO se dividem em diversas ocupações específicas, de acordo com a planilha 'ocupação' do arquivo RAIS_vinculos_layout $^{[1]}$. As últimas ocupações da categoria 23 estão ligadas à educação, porém parecem ser mais cargos administrativos e/ou de apoio que cargos do magitério propriamente dito (Coordenador Pedagogico, Orientador Educacional, Pedagogo, Psicopedagogo, Supervisor de Ensino, Designer Educacional). A categoria 33 é ainda mais heterogênea, incluindo Auxiliar de Desenvolvimento Infantil, Instrutor de Auto-Escola, Instrutor de Cursos Livres , Inspetor de Alunos de Escola Privada, Inspetor de Alunos de Escola Publica e Monitor de Transporte Escolar.

231105:Professor de Nivel Superior na Educacao Infantil (Quatro a Seis Anos)
231110:Professor de Nivel Superior na Educacao Infantil (Zero a Tres Anos)
231205:Professor da Educacao de Jovens e Adultos do Ensino Fundamental (Primeira a Quarta Serie)
231210:Professor de Nivel Superior do Ensino Fundamental (Primeira a Quarta Serie)
231305:Professor de Ciencias Exatas e Naturais do Ensino Fundamental
231310:Professor de Educacao Artistica do Ensino Fundamental
231315:Professor de Educacao Fisica do Ensino Fundamental
231320:Professor de Geografia do Ensino Fundamental
231325:Professor de Historia do Ensino Fundamental
231330:Professor de Lingua Estrangeira Moderna do Ensino Fundamental
231335:Professor de Lingua Portuguesa do Ensino Fundamental
231340:Professor de Matematica do Ensino Fundamental
232105:Professor de Artes no Ensino Medio
232110:Professor de Biologia no Ensino Medio
232115:Professor de Disciplinas Pedagogicas no Ensino Medio
232120:Professor de Educacao Fisica no Ensino Medio
232125:Professor de Filosofia no Ensino Medio
232130:Professor de Fisica no Ensino Medio
232135:Professor de Geografia no Ensino Medio
232140:Professor de Historia no Ensino Medio
232145:Professor de Lingua e Literatura Brasileira no Ensino Medio
232150:Professor de Lingua Estrangeira Moderna no Ensino Medio
232155:Professor de Matematica no Ensino Medio
232160:Professor de Psicologia no Ensino Medio
232165:Professor de Quimica no Ensino Medio
232170:Professor de Sociologia no Ensino Medio
233105:Professor da Area de Meio Ambiente
233110:Professor de Desenho Tecnico
233115:Professor de Tecnicas Agricolas
233120:Professor de Tecnicas Comerciais e Secretariais
233125:Professor de Tecnicas de Enfermagem
233130:Professor de Tecnicas Industriais
233135:Professor de Tecnologia e Calculo Tecnico
233205:Instrutor de Aprendizagem e Treinamento Agropecuario
233210:Instrutor de Aprendizagem e Treinamento Industrial
233215:Professor de Aprendizagem e Treinamento Comercial
233220:Professor Instrutor de Ensino e Aprendizagem Agroflorestal
233225:Professor Instrutor de Ensino e Aprendizagem em Servicos
234105:Professor de Matematica Aplicada (No Ensino Superior)
234110:Professor de Matematica Pura (No Ensino Superior)
234115:Professor de Estatistica (No Ensino Superior)
234120:Professor de Computacao (No Ensino Superior)
234125:Professor de Pesquisa Operacional (No Ensino Superior)
234205:Professor de Fisica (Ensino Superior)
234210:Professor de Quimica (Ensino Superior)
234215:Professor de Astronomia (Ensino Superior)
234305:Professor de Arquitetura
234310:Professor de Engenharia
234315:Professor de Geofisica
234320:Professor de Geologia
234405:Professor de Ciencias Biologicas do Ensino Superior
234410:Professor de Educacao Fisica no Ensino Superior
234415:Professor de Enfermagem do Ensino Superior
234420:Professor de Farmacia e Bioquimica
234425:Professor de Fisioterapia
234430:Professor de Fonoaudiologia
234435:Professor de Medicina
234440:Professor de Medicina Veterinaria
234445:Professor de Nutricao
234450:Professor de Odontologia
234455:Professor de Terapia Ocupacional
234460:Professor de Zootecnia do Ensino Superior
234505:Professor de Ensino Superior na Area de Didatica
234510:Professor de Ensino Superior na Area de Orientacao Educacional
234515:Professor de Ensino Superior na Area de Pesquisa Educacional
234520:Professor de Ensino Superior na Area de Pratica de Ensino
234604:Professor de Lingua Alema
234608:Professor de Lingua Italiana
234612:Professor de Lingua Francesa
234616:Professor de Lingua Inglesa
234620:Professor de Lingua Espanhola
234624:Professor de Lingua Portuguesa
234628:Professor de Literatura Brasileira
234632:Professor de Literatura Portuguesa
234636:Professor de Literatura Alema
234640:Professor de Literatura Comparada
234644:Professor de Literatura Espanhola
234648:Professor de Literatura Francesa
234652:Professor de Literatura Inglesa
234656:Professor de Literatura Italiana
234660:Professor de Literatura de Linguas Estrangeiras Modernas
234664:Professor de Outras Linguas e Literaturas
234668:Professor de Linguas Estrangeiras Modernas
234672:Professor de Linguistica e Linguistica Aplicada
234676:Professor de Filologia e Critica Textual
234680:Professor de Semiotica
234684:Professor de Teoria da Literatura
234705:Professor de Antropologia do Ensino Superior
234710:Professor de Arquivologia do Ensino Superior
234715:Professor de Biblioteconomia do Ensio Superior
234720:Professor de Ciencia Politica do Ensino Superior
234725:Professor de Comunicacao Social do Ensino Superior
234730:Professor de Direito do Ensino Superior
234735:Professor de Filosofia do Ensino Superior
234740:Professor de Geografia do Ensino Superior
234745:Professor de Historia do Ensino Superior
234750:Professor de Jornalismo
234755:Professor de Museologia do Ensino Superior
234760:Professor de Psicologia do Ensino Superior
234765:Professor de Servico Social do Ensino Superior
234770:Professor de Sociologia do Ensino Superior
234805:Professor de Economia
234810:Professor de Administracao
234815:Professor de Contabilidade
234905:Professor de Artes do Espetaculo no Ensino Superior
234910:Professor de Artes Visuais no Ensino Superior (Artes Plasticas e Multimidia)
234915:Professor de Musica no Ensino Superior
239205:Professor de Alunos com Deficiencia Auditiva e Surdos
239210:Professor de Alunos com Deficiencia Fisica
239215:Professor de Alunos com Deficiencia Mental
239220:Professor de Alunos com Deficiencia Multipla
239225:Professor de Alunos com Deficiencia Visual
239405:Coordenador Pedagogico
239410:Orientador Educacional
239415:Pedagogo
239420:Professor de Tecnicas e Recursos Audiovisuais
239425:Psicopedagogo
239430:Supervisor de Ensino
239435:Designer Educacional

331105:Professor de Nivel Medio na Educacao Infantil
331110:Auxiliar de Desenvolvimento Infantil
331205:Professor de Nivel Medio no Ensino Fundamental
331305:Professor de Nivel Medio no Ensino Profissionalizante
332105:Professor Leigo no Ensino Fundamental
332205:Professor Pratico no Ensino Profissionalizante
333105:Instrutor de Auto-Escola
333110:Instrutor de Cursos Livres
333115:Professores de Cursos Livres
334105:Inspetor de Alunos de Escola Privada
334110:Inspetor de Alunos de Escola Publica
334115:Monitor de Transporte Escolar

$^{[1]}$ ftp://ftp.mtps.gov.br/pdet/microdados/RAIS/Layouts/v%C3%ADnculos/RAIS_vinculos_layout.xls


In [9]:
ed_basica = [231105, 231110, 231205, 231210, 231305, 231310, 231315, 
             231320, 231325, 231330, 231335, 231340, 331105, 332105]
print('Remuneração dos professores gaúchos: R$', df1['Remuneracao'].mean())
print('Remuneração dos professores do ensino básico gaúchos: R$', 
      df1[df1['CBO'].isin(ed_basica)]['Remuneracao'].mean())
print('Remuneração dos professores do ensino básico gaúchos: R$', 
      df1[df1['CBO'].isin(ed_basica)]['Remuneracao'].mean())
print('Remuneração dos professores do ensino básico gaúchos: R$', 
      df1[df1['CBO'].isin(ed_basica) & (df1['Munic'] == 431490)]['Remuneracao'].mean())

df1[df1['CBO'].isin(ed_basica) & (df1['Munic'] == 431490)]['Remuneracao'].hist();


Remuneração dos professores gaúchos: R$ 2754.9454339169265
Remuneração dos professores do ensino básico gaúchos: R$ 2754.890419749015
Remuneração dos professores do ensino básico gaúchos: R$ 2754.890419749015
Remuneração dos professores do ensino básico gaúchos: R$ 4968.04446606913

In [10]:
poa = df1[(df1['Munic'] == 431490)]

Natureza Jurídica e Códigos

POD EXEC FE 1015 SOC MISTA 2038 SOC SIMP PUR 2232 FUN DOM EXT 3212
POD EXEC ES 1023 SA ABERTA 2046 SOC SIMP LTD 2240 ORG RELIG 3220
POD EXEC MU 1031 SA FECH 2054 SOC SIMP COL 2259 COMUN INDIG 3239
POD LEG FED 1040 SOC QT LTDA 2062 SOC SIMP COM 2267 FUNDO PRIVAD 3247
POD LEG EST 1058 SOC COLETV 2070 EMPR BINAC 2275 OUTR ORG 3999
POD LEG MUN 1066 OC COLETV07 2076 CONS EMPREG 2283 EMP IND IMO 4014
POD JUD FED 1074 SOC COMD SM 2089 CONS SIMPLES 2291 SEG ESPEC 4022
POD JUD EST 1082 SOC COMD AC 2097 CARTORIO 3034 CONTR IND 4080
AUTARQ FED 1104 SOC CAP IND 2100 ORG SOCIAL 3042 CONTR IND07 4081
AUTARQ EST 1112 SOC CIVIL 2119 OSCIP 3050 CAN CARG POL 4090
AUTARQ MUN 1120 SOC CTA PAR 2127 OUT FUND PR 3069 LEILOEIRO 4111
FUNDAC FED 1139 FRM MER IND 2135 SERV SOC AU 3077 ORG INTERN 5002
FUNDAC EST 1147 COOPERATIVA 2143 CONDOMIN 3085 ORG INTERNAC 5010
FUNDAC MUN 1155 CONS EMPRES 2151 UNID EXEC 3093 REPR DIPL ES 5029
ORG AUT FED 1163 GRUP SOC 2160 COM CONC 3107 OUT INST EXT 5037
ORG AUT EST 1171 FIL EMP EXT 2178 ENT MED ARB 3115 IGNORADO -1
COM POLINAC 1198 FIL ARG-BRA 2194 PART POLIT 3123
FUNDO PUBLIC 1201 ENT ITAIPU 2208 ENT SOCIAL 3130
ASSOC PUBLIC 1210 EMP DOM EXT 2216 ENT SOCIAL07 3131
EMP PUB 2011 FUN INVEST 2224 FIL FUN EXT 3204

In [29]:
# Conta o número de observações no DataFrame 'poa' por grupo de 'Natureza' (Natureza Jurídica):

poa['Admissao'].groupby(by = poa['Natureza']).count()


Out[29]:
Natureza
1015      3681
1023    106728
1031       148
1058      2883
1066         1
1074       816
1104      3959
1112      1430
1139      1127
1147        14
1260       109
2011      1346
2038        31
2046         9
2054       165
2062     14114
2089        10
2097       103
2135      1287
2143         3
2151         4
2232         2
2240      1731
2305       449
3034        58
3069      1444
3077      2827
3085         1
3131       158
3204         8
3220        37
3301        55
3999     16482
4081        71
Name: Admissao, dtype: int64

De acordo com a Secretaria Municipal de Educação: "A Rede Municipal de Ensino – RME – é formada por 99 escolas com cerca de 4 mil professores e 900 funcionários, atende mais de 50 mil alunos da Educação Infantil, Ensino Fundamental, Ensino Médio, Educação Profissional de Nível Técnico, Educação de Jovens e Adultos (EJA) e Educação Especial."

Entretanto, os dados da RAIS mostram apenas 148 professores do Poder Executivo Municipal ("POD EXEC MU 1031"). A maioria dos professores (106.728) são do Poder Executivo Estadual (POD EXEC ES 1023).


In [12]:
df1[df1['CBO'].isin(ed_basica) & (df1['Munic'] == 431490)]['Remuneracao'].groupby(by = df1['Idade']).mean()


Out[12]:
Idade
2     820.900000
3    1385.833410
4    1679.573070
5    2798.383659
6    5749.772298
7    8248.578670
8    9684.310507
Name: Remuneracao, dtype: float64

In [13]:
from statsmodels.stats.weightstats import ztest
# Source: http://www.statsmodels.org/dev/generated/statsmodels.stats.weightstats.ztest.html#statsmodels.stats.weightstats.ztest
print(ztest(x1 = df1[(df1['CBO'].isin(ed_basica)) & (df1['Munic'] == 431490)]['Remuneracao'], x2=None,
            value=10000, alternative='two-sided', usevar='pooled', ddof=1.0))

print(ztest(x1 = df1[(df1['CBO'].isin(ed_basica)) & (df1['Munic'] == 431490)]['Remuneracao'], x2=None,
            value=10000, alternative='smaller', usevar='pooled', ddof=1.0))


(-83.392435690696175, 0.0)
(-83.392435690696175, 0.0)

In [14]:
from statsmodels.stats.weightstats import DescrStatsW
# Source: http://www.statsmodels.org/dev/generated/statsmodels.stats.weightstats.DescrStatsW.html#statsmodels.stats.weightstats.DescrStatsW

stats = DescrStatsW(df1[(df1['CBO'].isin(ed_basica)) & (df1['Munic'] == 431490)]['Remuneracao'])
print(stats.mean)
print(stats.var)
print(stats.std_mean)

print(stats.ttest_mean(value = 10000, alternative = 'larger'))
print(stats.ztest_mean(value = 10000, alternative = 'larger'))
# tstat, pval, df

print(stats.ttost_mean(low = 6000, upp = 4000))
print(stats.ztost_mean(low = 6000, upp = 4000))
# TOST: two one-sided t tests
# null hypothesis: m < low or m > upp alternative hypothesis: low < m < upp
# returns: pvalue; t1, pv1, df1; t2, pv2, df2

# DescrStatsW.ttest()


4968.04446607
28432542.3584
60.3406710963
(-83.392435690696203, 1.0, 7809.0)
(-83.392435690696203, 1.0)
(1.0, (-17.102155398372727, 1.0, 7809.0), (16.04298474778901, 1.0, 7809.0))
(1.0, (-17.102155398372727, 1.0), (16.04298474778901, 1.0))

Variáveis dummy de acordo com o layout$^{[1]}$:

FAIXA ETÁRIA
01 10 A 14 anos
02 15 A 17 anos
03 18 A 24 anos
04 25 A 29 anos
05 30 A 39 anos
06 40 A 49 anos
07 50 A 64 anos
08 65 anos ou mais
{ñ class} {ñ class}
FAIXA HORA CONTRATUAL
01 Até 12 horas
02 13 a 15 horas
03 16 a 20 horas
04 21 a 30 horas
05 31 a 40 horas
06 41 a 44 horas
grau de instruçao escolaridade após 2005
ANALFABETO 1
ATE 5.A INC 2
5.A CO FUND 3
6. A 9. FUND 4
FUND COMPL 5
MEDIO INCOMP 6
MEDIO COMPL 7
SUP. INCOMP 8
SUP. COMP 9
MESTRADO 10
DOUTORADO 11
IGNORADO -1

$^{[1]}$ ftp://ftp.mtps.gov.br/pdet/microdados/RAIS/Layouts/v%C3%ADnculos/RAIS_vinculos_layout.xls


In [15]:
import statsmodels.api as sm

# Dummies:
groups = df1['Idade']
dummy = sm.categorical(groups, drop=True)
x = np.linspace(0, 20, nsample)
# drop reference category
X = np.column_stack((x, dummy[:,1:]))
X = sm.add_constant(X, prepend=False)

X = pd.concat([df1['Natureza'], df1['Horas'], df1['Tempo'], df1['Sexo'], df1['Idade'], df1['Raca']], axis = 1)
X = sm.add_constant(X)
y = df1['Remuneracao']


---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)
<ipython-input-15-7e1ded278b06> in <module>()
      3 # Dummies:
      4 groups = df1['Idade']
----> 5 dummy = sm.categorical(groups, drop=True)
      6 x = np.linspace(0, 20, nsample)
      7 # drop reference category

/home/jayme/anaconda3/lib/python3.6/site-packages/statsmodels/tools/tools.py in categorical(data, col, dictnames, drop)
    202     elif data.__class__ is np.ndarray or not isinstance(data, np.ndarray):
    203         if not isinstance(data, np.ndarray):
--> 204             raise NotImplementedError("Array-like objects are not supported")
    205 
    206         if isinstance(col, int):

NotImplementedError: Array-like objects are not supported

In [ ]:
model = sm.OLS(y, X)
results = model.fit()
print(results.summary())

In [ ]:
# #Open all the .csv file in a directory
# #Author: Gaurav Singh
# #Source: https://stackoverflow.com/questions/20906474/import-multiple-csv-files-into-pandas-and-concatenate-into-one-dataframe


# import pandas as pd
# import glob

# #get data file names
# path =r'/mnt/part/Data/RAIS/2014/'
# allFiles = glob.glob(path + "/*.zip")

# df = pd.DataFrame()
# list_ = []
# for file_ in allFiles:
#     frame = pd.read_csv(file_, sep = ';', encoding = 'cp860', decimal = ',')
#     list_.append(frame)
# df = pd.concat(list_, axis=0)

Trabalhando com dados de todas as UFs


In [ ]:
# ac = pd.read_csv('/mnt/part/Data/RAIS/2014/AC2014.zip', sep = ';', encoding = 'cp860', decimal = ',')
# al = pd.read_csv('/mnt/part/Data/RAIS/2014/AL2014.zip', sep = ';', encoding = 'cp860', decimal = ',')
# am = pd.read_csv('/mnt/part/Data/RAIS/2014/AM2014.zip', sep = ';', encoding = 'cp860', decimal = ',')
# ap = pd.read_csv('/mnt/part/Data/RAIS/2014/AP2014.zip', sep = ';', encoding = 'cp860', decimal = ',')
# ba = pd.read_csv('/mnt/part/Data/RAIS/2014/BA2014.zip', sep = ';', encoding = 'cp860', decimal = ',')
# ce = pd.read_csv('/mnt/part/Data/RAIS/2014/CE2014.zip', sep = ';', encoding = 'cp860', decimal = ',')
# df = pd.read_csv('/mnt/part/Data/RAIS/2014/DF2014.zip', sep = ';', encoding = 'cp860', decimal = ',')
# es = pd.read_csv('/mnt/part/Data/RAIS/2014/ES2014.zip', sep = ';', encoding = 'cp860', decimal = ',')
# go = pd.read_csv('/mnt/part/Data/RAIS/2014/GO2014.zip', sep = ';', encoding = 'cp860', decimal = ',')
# ma = pd.read_csv('/mnt/part/Data/RAIS/2014/MA2014.zip', sep = ';', encoding = 'cp860', decimal = ',')
# mg = pd.read_csv('/mnt/part/Data/RAIS/2014/MG2014.zip', sep = ';', encoding = 'cp860', decimal = ',')
# ms = pd.read_csv('/mnt/part/Data/RAIS/2014/MS2014.zip', sep = ';', encoding = 'cp860', decimal = ',')
# mt = pd.read_csv('/mnt/part/Data/RAIS/2014/MT2014.zip', sep = ';', encoding = 'cp860', decimal = ',')
# pa = pd.read_csv('/mnt/part/Data/RAIS/2014/PA2014.zip', sep = ';', encoding = 'cp860', decimal = ',')
# pb = pd.read_csv('/mnt/part/Data/RAIS/2014/PB2014.zip', sep = ';', encoding = 'cp860', decimal = ',')
# pe = pd.read_csv('/mnt/part/Data/RAIS/2014/PE2014.zip', sep = ';', encoding = 'cp860', decimal = ',')
# pi = pd.read_csv('/mnt/part/Data/RAIS/2014/PI2014.zip', sep = ';', encoding = 'cp860', decimal = ',')
# pr = pd.read_csv('/mnt/part/Data/RAIS/2014/PR2014.zip', sep = ';', encoding = 'cp860', decimal = ',')
# rj = pd.read_csv('/mnt/part/Data/RAIS/2014/RJ2014.zip', sep = ';', encoding = 'cp860', decimal = ',')
# rn = pd.read_csv('/mnt/part/Data/RAIS/2014/RN2014.zip', sep = ';', encoding = 'cp860', decimal = ',')
# ro = pd.read_csv('/mnt/part/Data/RAIS/2014/RO2014.zip', sep = ';', encoding = 'cp860', decimal = ',')
# rr = pd.read_csv('/mnt/part/Data/RAIS/2014/RR2014.zip', sep = ';', encoding = 'cp860', decimal = ',')
# rs = pd.read_csv('/mnt/part/Data/RAIS/2014/RS2014.zip', sep = ';', encoding = 'cp860', decimal = ',')
# sc = pd.read_csv('/mnt/part/Data/RAIS/2014/SC2014.zip', sep = ';', encoding = 'cp860', decimal = ',')
# se = pd.read_csv('/mnt/part/Data/RAIS/2014/SE2014.zip', sep = ';', encoding = 'cp860', decimal = ',')
# sp = pd.read_csv('/mnt/part/Data/RAIS/2014/SP2014.zip', sep = ';', encoding = 'cp860', decimal = ',')
# to = pd.read_csv('/mnt/part/Data/RAIS/2014/TO2014.zip', sep = ';', encoding = 'cp860', decimal = ',')

In [ ]:
# Concatenar os DataFrameS individuais a partir de uma lista:

# lista = [ac, al, am, ap, ba, ce, df, es, go, ma, mg, ms, mt, pa, pb, pe, pi, pr, rj, rn, ro, rr, rs, sc, se, sp, to]
# rais = pd.concat(lista)

In [ ]:
# Gerando uma variável com a UF a partir do Município:

# np.floor(rais['Municφpio'] / 10000).unique()

Código UF: 11 Rondônia, 12 Acre, 13 Amazonas, 14 Roraima, 15 Pará, 16 Amapá, 17 Tocantins, 21 Maranhão, 22 Piauí, 23 Ceará, 24 Rio Grande do Norte, 25 Paraíba, 26 Pernambuco, 27 Alagoas, 28 Sergipe, 29 Bahia, 31 Minas Gerais, 32, Espírito Santo, 33 Rio de Janeiro, 35 São Paulo, 41 Paraná, 42 Santa Catarina, 43 Rio Grande do Sul, 50 Mato Grosso do Sul, 51 Mato Grosso, 52 Goiás, 53 Distrito Federal.